package com.yzh.openai.domain.order.service;

import com.yzh.openai.domain.order.model.aggregates.CreateOrderAggregate;
import com.yzh.openai.domain.order.model.entity.PayOrderEntity;
import com.yzh.openai.domain.order.model.entity.ProductEntity;
import com.yzh.openai.domain.order.model.entity.ShopCartEntity;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 订单服务
 */
public interface IOrderService {
    /**
     * 用户下单，通过购物车信息，返回下单后的支付单
     * @param shopCartEntity 购物车
     * @return 支付单
     */
    PayOrderEntity createOrder(ShopCartEntity shopCartEntity);
    /**
     * 更新订单支付成功
     * @param orderId 用户ID
     * @param transactionId 回调消息交易单
     * @param totalAmount 订单金额
     * @param payTime 支付时间
     * @return
     */
    boolean changeOrderPaySuccess(String orderId, String transactionId, BigDecimal totalAmount, Date payTime);
    /**
     * 查询订单信息
     * @param orderId
     * @return
     */
    CreateOrderAggregate queryOrder(String orderId);
    /**
     * 订单商品发货
     * @param orderId
     */
    void deliverGoods(String orderId);
    /**
     * 查询待补货订单
     * @return
     */
    List<String> queryReplenishmentOrder();
    /**
     * 查询有效期内，未接收到支付回调的订单
     * @return
     */
    List<String> queryNoPayNotifyOrderList();
    String queryNoPayNotifyOrder();
    /**
     * 查询超时15分钟，未支付的订单
     * @return
     */
    List<String> queryTimeoutCloseOrderList();
    /**
     * 变更：订单支付关闭
     * @param orderId
     * @return
     */
    boolean changeOrderClose(String orderId);
    /**
     * 查询商品列表
     * @return
     */
    List<ProductEntity> queryProductList();
}
